/**
 * 
 * @author Joao Borrego, Nara Fanha
 * @version 07-12-2013
 */


public class Podio {
	
	private int[] podio;
	private int counter;
	private int iterador;
	
	
	/**
	 * Construtor
	 * @param posicoes
	 */
	public Podio(int posicoes) {
		this.podio = new int[posicoes];
		this.counter = 0;
		this.iterador = -1;
	}
	
	/**
	 * Este metodo define uma nova posicao no podio, se so restar um unico jogador, coloca esse mesmo jogador tambem
	 * @param jog jogador a ser inserido
	 * @pre jog>=0
	 * @pre !isComplete()
	 * @pre !existe(jog)
	 */
	public void setLugar(int jog) 
	{
		this.podio[this.counter++] = jog;
		
		if(this.numOcupados() == this.podio.length - 1) 
		{
			this.podio[this.counter++] = verRestante();
		}
		
		
	}
	
	/**
	 * Este metodo verifica qual e o jogador que resta
	 * @return jogador restante
	 * @pre numOcupados == podio.length
	 */
	private int verRestante() 
	{
		int res = 0;
		
		for(int x = 0; x < this.podio.length && res == 0; x++) 
		{
			if(!existe(x+1)) {
				res = x + 1;
			}
			
		}
		return res;
	}
	
	
	
	/**
	 * Este metodo devolve o numero de posicoes ja ocupadas
	 * @return numero de posicoes ja ocupadas
	 */
	public int numOcupados() 
	{
		return this.counter;
	}
	
	
	
	/**
	 * Este metodo verifica se certo numero ja existe
	 * @param jog
	 * @return
	 */
	public boolean existe(int jog) 
	{
		boolean existe = false;
		int x = 0;
		while(x < this.podio.length && !existe) 
		{
			if(this.podio[x] == jog) 
			{
				existe = true;
			}
			
			x++;
		}
		return existe;
	}
	
	
	/**
	 * Verifica se o podio esta completo ou nao
	 * @return true se completo, false senao
	 */
	public boolean isComplete() 
	{
		return this.counter >= this.podio.length;
	}
	
	
	/**
	 * Inicializa o iterador
	 */
	public void iniciarIterador() 
	{
		this.iterador = 0;
	}
	
	
	/**
	 * Este metodo verifica se tem valor seguinte
	 * @return true se tem, false senao
	 */
	public boolean hasNext() 
	{
		return this.iterador > -1 && this.iterador < this.counter; 
	}
	
	
	/**
	 * Este metodo percorre o iterador
	 * @return valor da posicao atual do iterador
	 * @pre hasNext()
	 */
	public int next() 
	{
		return this.podio[this.iterador++];
	}
	
	
	
	
	
}
